package com.jdy.haoduoaiteacher.view.swipemenu;

import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.WrapperListAdapter;

/**
 * 
 * @author baoyz
 * @date 2014-8-24
 * 
 */
public class SwipeMenuAdapter implements WrapperListAdapter,
    SwipeMenuView.OnSwipeItemClickListener {

  private final ListAdapter mAdapter;
  private final Context mContext;
  private SwipeMenuListView.OnMenuItemClickListener onMenuItemClickListener;

  public SwipeMenuAdapter(Context context, ListAdapter adapter) {
    mAdapter = adapter;
    mContext = context;
  }

  @Override
  public int getCount() {
    return mAdapter.getCount();
  }

  @Override
  public Object getItem(int position) {
    return mAdapter.getItem(position);
  }

  @Override
  public long getItemId(int position) {
    return mAdapter.getItemId(position);
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    SwipeMenuLayout layout = null;
    if (convertView == null) {
      View contentView = mAdapter.getView(position, convertView, parent);
      SwipeMenu menu = new SwipeMenu(mContext);
      menu.setViewType(mAdapter.getItemViewType(position));
      createMenu(menu, position);
      SwipeMenuView menuView = new SwipeMenuView(menu,
          (SwipeMenuListView) parent);
      menuView.setOnSwipeItemClickListener(this);
      SwipeMenuListView listView = (SwipeMenuListView) parent;
      layout = new SwipeMenuLayout(contentView, menuView,
          listView.getCloseInterpolator(), listView.getOpenInterpolator());
      layout.setPosition(position);
    } else {
      layout = (SwipeMenuLayout) convertView;
      layout.closeMenu();
      layout.setPosition(position);
      View view = mAdapter.getView(position, layout.getContentView(), parent);
    }
    return layout;
  }

  public void createMenu(SwipeMenu menu, int pos) {
    // Test Code
    SwipeMenuItem item = new SwipeMenuItem(mContext);
    item.setTitle("Item 1");
    item.setBackground(new ColorDrawable(Color.GRAY));
    item.setWidth(300);
    menu.addMenuItem(item);

    item = new SwipeMenuItem(mContext);
    item.setTitle("Item 2");
    item.setBackground(new ColorDrawable(Color.RED));
    item.setWidth(300);
    menu.addMenuItem(item);
  }

  @Override
  public void onItemClick(SwipeMenuView view, SwipeMenu menu, int index) {
    if (onMenuItemClickListener != null) {
      onMenuItemClickListener.onMenuItemClick(view.getPosition(), menu, index);
    }
  }

  public void setOnMenuItemClickListener(
      SwipeMenuListView.OnMenuItemClickListener onMenuItemClickListener) {
    this.onMenuItemClickListener = onMenuItemClickListener;
  }

  @Override
  public void registerDataSetObserver(DataSetObserver observer) {
    mAdapter.registerDataSetObserver(observer);
  }

  @Override
  public void unregisterDataSetObserver(DataSetObserver observer) {
    mAdapter.unregisterDataSetObserver(observer);
  }

  @Override
  public boolean areAllItemsEnabled() {
    return mAdapter.areAllItemsEnabled();
  }

  @Override
  public boolean isEnabled(int position) {
    return mAdapter.isEnabled(position);
  }

  @Override
  public boolean hasStableIds() {
    return mAdapter.hasStableIds();
  }

  @Override
  public int getItemViewType(int position) {
    return mAdapter.getItemViewType(position);
  }

  @Override
  public int getViewTypeCount() {
    return mAdapter.getViewTypeCount();
  }

  @Override
  public boolean isEmpty() {
    return mAdapter.isEmpty();
  }

  @Override
  public ListAdapter getWrappedAdapter() {
    return mAdapter;
  }

}